home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / misc / blitscre.lha / blitterscreen / bltscr.s < prev    next >
Text File  |  1980-01-14  |  14KB  |  577 lines

  1.  
  2. *### BLITTERSCREEN:
  3. *### 2x2 / 2x1 fullscreen, copperscreen obsolete! =:)
  4.  
  5.    xdef int3
  6.  
  7.    xdef bltbsy
  8.    xdef bltpc
  9.  
  10.    xdef timer
  11.    xdef timer2
  12.    xdef oldtimer
  13.  
  14.    xdef customvbl
  15.  
  16. timer dc.l 0   ;sum vbl-timers...
  17. timer2 dc.l 0
  18. oldtimer dc.l 0
  19.  
  20. waitblt MACRO
  21.    btst #6,$dff002 ;old blitters said to have bug...
  22. waitblt\@:
  23.    btst #6,$dff002
  24.    bne waitblt\@
  25.    ENDM
  26. * -----------
  27.  
  28. show2 equ 0 ;equ 1 show rastertiming of blitterpasses
  29.  
  30. *** HARDWAREHACK INT HANDLER
  31. int3:
  32.    btst #6,$dff01f
  33.    beq.s nobltint
  34.  
  35. bltint:
  36.    move.w #$0040,$dff09c
  37.  
  38.    movem.l d0-d1/a5/a6,-(sp)
  39.    move.l #$dff000,a5
  40.    move.l bltpc(pc),a6
  41.  
  42.    IFNE show2
  43.    move.w #$0ff,$dff180  ;blt reload
  44.    ENDC
  45. bltsetreg:
  46.    move.l (a6)+,d0
  47.    move.w d0,d1 : beq.s bltintend : swap d0
  48.    move.w d0,0(a5,d1.w)
  49.  
  50.    cmp.w #$5e,d1 : beq.s bltstarted
  51.    cmp.w #$58,d1 : bne.s bltsetreg
  52. * ---
  53. bltstarted:
  54.    move.l a6,bltpc
  55.    movem.l (sp)+,d0-d1/a5/a6
  56.  
  57.    IFNE show2
  58.    move.w #$800,$dff180  ;blt works
  59.    ENDC
  60.    rte
  61.  
  62. bltintend:
  63.    clr.w bltbsy
  64.    movem.l (sp)+,d0-d1/a5/a6
  65.  
  66.    IFNE show2
  67.    move.w #$000,$dff180 ;blt rdy
  68.    ENDC
  69.    rte
  70.  
  71. nobltint:
  72.    btst #5,$dff01f
  73.    bne.s vblint
  74.    btst #4,$dff01f
  75.    bne.s copint
  76. * huh ?
  77.    move.w #$3fff,$dff09c ;kill all requests to avoid(?) delirium
  78.    rte
  79.  
  80. bltpc dc.l 0  ;pointer to blitterinstructions to be done
  81. bltbsy dc.w 0 ;this is 0 if all blitter-passes are done
  82.  
  83. vblint:
  84.    move.w #$0020,$dff09c
  85.    movem.l d0-d7/a0-a6,-(sp)
  86.  
  87.    move.l customvbl,a0 : jsr (a0) ;CUSTOM ROUTINE HERE!
  88.  
  89.    add.l #1,timer : add.l #1,timer2
  90.  
  91.    move.w #$0020,$dff09c
  92.    movem.l (sp)+,d0-d7/a0-a6
  93.    rte
  94.  
  95. copint: ;theoretical you never get here...
  96.    move.w #$0010,$dff09c
  97.    rte
  98.  
  99. customvbl dc.l customvbl0
  100. customvbl0:
  101.    rts
  102.  
  103. *** 2xY: Make a special 2x2 or 2x1 screen ***
  104.  
  105. * NOTE: 2x2 or 2x1 depends on the modulo/doublescan-bit you chose
  106. * in header coplist! Also make sure sprites are 64bit, highest
  107. * pri, and chose the spritebank that got a dark color at offset 1
  108. * (col 1,17,33....)
  109.  
  110. * IN: ALL BUFFERS IN CHIPMEM!!!
  111.  
  112. * spritebuffer: a2 (size: 312*4*2*8)
  113. * Coplist: A0  Plane0 : D0.L
  114.  
  115. * Ystart: D2   number of lines (0-127): D3
  116. * planesize: D4.L   linesize: D5
  117.  
  118. mfpoffs dc.l 0 ;not used by caller
  119. mfloffs dc.l 0
  120.  
  121. mk2xY:
  122.    xdef mk2xY
  123.  
  124.    jsr mspr ;gen cover-sprites in (a2)+ and copmoves in (a0)+
  125.  
  126. * PLANES
  127.    movem.l d0-d7/a1-a6,-(sp) ;a0=(ptr)copl
  128.  
  129.    move.l d4,mfpoffs : ext.l d5 : move.l d5,mfloffs
  130.  
  131. * gen planeptr moves
  132.    movem.l d3/d0,-(sp)
  133.    move.w #$00e0,d3 : move.w #4-1,d7
  134. mf256genhi:
  135.    move.w d3,(a0)+ : addq.w #2,d3 : move.l d0,(a0)+  ;store hiwd ! -2(a0)
  136.    move.w d3,-2(a0) : addq.w #2,d3 : move.w d0,(a0)+ ;store lowd
  137. ;every 2nd plane same data
  138.    move.w d3,(a0)+ : addq.w #2,d3 : move.l d0,(a0)+  ;store hiwd ! -2(a0)
  139.    move.w d3,-2(a0) : addq.w #2,d3 : move.w d0,(a0)+ ;store lowd
  140.  
  141.    add.l mfpoffs,d0
  142.    dbra d7,mf256genhi
  143. * end gen ptrs
  144.    movem.l (sp)+,d3/d0
  145.  
  146.    and.l #$ff,d2 : sub.b #1,d2 : ror.l #8,d2   ;sub #1: prev line
  147.    move.l #$00e1fffe,d4 : or.l d2,d4           ;WAS: 00df
  148. *
  149.    move.w d3,d5
  150.    subq.w #1,d5
  151. mf256yanz:
  152.    move.l #$1020010,d7
  153.    move.w #2-1,d6
  154. mf256do2:
  155.    move.l d4,(a0)+ : add.l #$01000000,d4  ;cwait
  156.    move.l d7,(a0)+ : eor.l #$00000031,d7  ;horiz shift
  157.                      ;             ^---- 3: 1 -> 2 -> 1 -> 2 ....
  158.    dbra d6,mf256do2
  159.  
  160.    add.l mfloffs,d0
  161.    dbra d5,mf256yanz
  162.  
  163.    movem.l (sp)+,d0-d7/a1-a6 ;a0=(ptr)copl
  164.    rts
  165.  
  166. * Sprites that mask out doubleplane-data-rubbish
  167.  
  168. * sprbuf at a2 (COPLIST: FMODE=$F, $dff104=$003f!)
  169. * copl at a0
  170. * mksprites into sprbuf=(a2)+ and according coppermoves in (a0)+
  171. mspr:
  172.    xdef mspr
  173.  
  174.    movem.l d0-d7/a1-a6,-(sp) ;no a0! coz *copl
  175.  
  176.    move.l #$00968020,(a0)+ ;rehash sprites (for safety)
  177.  
  178.    lea mf2sprdat,a1
  179.  
  180.    move.l a2,d0
  181.    add.l #15,d0
  182.    and.l #$fffffff0,d0
  183.    move.l d0,a2 ;align
  184.  
  185.    move.w #$0120,d1 ;spr0pth
  186.  
  187.    move.w #8-1,d7 ;sprcnt
  188. mf2mkspr:
  189. * cmoves for sprptr in copl
  190.  
  191.    move.l a2,d0
  192.    move.w d1,(a0)+
  193.    addq.w #2,d1 ;hiptr -> loptr
  194.    swap d0
  195.    move.w d0,(a0)+
  196.    swap d0 ;hiwd
  197.    move.w d1,(a0)+
  198.    addq.w #2,d1 ;next sprptr
  199.    move.w d0,(a0)+
  200.  
  201. * make sprbuf
  202.    move.l (a1)+,(a2)+ ;ctl1
  203.    move.l #0,(a2)+    ;dummy for 64bit fetchmode
  204.    move.l (a1)+,(a2)+ ;ctl2
  205.    move.l #0,(a2)+    ;dummy for 64bit fetchmode
  206.  
  207.    move.l (a1)+,d2
  208.    move.l (a1)+,d3
  209.    move.l d2,d4
  210.    ror.l #1,d4
  211.    move.l d3,d5
  212.    ror.l #1,d5
  213.  
  214.    move.w #128-1,d6
  215. mf2mksprdat:
  216.    move.l d2,(a2)+
  217.    move.l d2,(a2)+
  218.    move.l d3,(a2)+
  219.    move.l d3,(a2)+
  220. ;2nd line
  221.    move.l d4,(a2)+
  222.    move.l d4,(a2)+
  223.    move.l d5,(a2)+
  224.    move.l d5,(a2)+                ;2nd plane
  225.  
  226.    dbra d6,mf2mksprdat
  227.  
  228.    move.l #$0,(a2)+
  229.    move.l #$0,(a2)+
  230.    move.l #$0,(a2)+
  231.    move.l #$0,(a2)+
  232.  
  233.    dbra d7,mf2mkspr
  234.  
  235.    movem.l (sp)+,d0-d7/a1-a6 ;ohne a0! weil *copl
  236.    rts
  237.  
  238. * ctl 1, ctl 2, plane 0, plane 1 (to be lsr'd for 2nd line)
  239. mf2sprdat:
  240.    dc.l $28400000,$a7020000,$aaaaaaaa,$00000000
  241.    dc.l $28600000,$a7020000,$aaaaaaaa,$00000000 ;1 & 2 nonattached, col 1 :)
  242.    dc.l $28800000,$a7020000,$aaaaaaaa,$00000000
  243.    dc.l $28800000,$a7820000,$00000000,$00000000
  244.    dc.l $28a00000,$a7020000,$aaaaaaaa,$00000000
  245.    dc.l $28a00000,$a7820000,$00000000,$00000000
  246.    dc.l $28c00000,$a7020000,$aaaaaaaa,$00000000
  247.    dc.l $28c00000,$a7820000,$00000000,$00000000
  248.  
  249. *** non-scrambled chunky-to-planar ***
  250. * not really c2p (!), destination is special 2x2 or 2x1 screen
  251. *
  252. * IN: ALL BUFFERS IN CHIPMEM *except blitterlist (a6)*  !!!
  253. *
  254. *  a3: scramble-buffer at size of chunky buffer
  255. *
  256. * other regs identical to sc2bs ! they are:
  257. *
  258. *  a6: blitter-list buffer (size: less than 2k)
  259. *  a0: chunky buffer  a1: screen  a2: pass-buffer (half size of chunky buffer)
  260. *  d0.l: number of chunky pixels  d1.l: planeoffset
  261.  
  262. c2bs:
  263.    xdef c2bs
  264.  
  265.    tst.w bltbsy : bne c2bs ;for the very unlikely case your mapping-
  266.                            ;engine renders faster than blitterc2p ;)
  267.                                                       
  268.    move.l a6,bltpc ;handler starts at bltpc
  269.  
  270.    movem.l d0-d1/a0-a3,-(sp)
  271.    move.l a3,a4 ;well....
  272.  
  273. *** init values
  274.  
  275.    move.l #$04000096,(a6)+
  276.    move.l #$80400096,(a6)+
  277.  
  278.    move.l #$ffff0044,(a6)+
  279.    move.l #$ffff0046,(a6)+
  280.  
  281. *** scrambling passes
  282. ;subpass 1
  283.   lea (a0),a3
  284.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  285.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  286.   lea 4(a0),a3
  287.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  288.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  289.   lea (a4),a3
  290.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  291.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  292.  
  293.    move.l #$8de40040,(a6)+
  294.    move.l #$00000042,(a6)+
  295.    move.l #$00ff0070,(a6)+ ;cdat
  296.  
  297.    move.l #$00060064,(a6)+ : move.l #$00060062,(a6)+ ;a/b mod
  298.    move.l #$00060066,(a6)+ ;d mod
  299.  
  300.    move.l d0,d6 : lsr.l #3,d6 ;1/4 of scr, words => /8
  301.    move.w d6,(a6)+
  302.    move.w #$5C,(a6)+       ;SIZV
  303.  
  304.    move.l #$0001005E,(a6)+ ;SIZH+start
  305.  
  306. ;subpass2
  307.   lea 2(a0),a3
  308.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  309.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  310.   lea 6(a0),a3
  311.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  312.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  313.   lea 2(a4),a3
  314.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  315.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  316.  
  317.    move.l #$8de40040,(a6)+
  318.    move.l #$00000042,(a6)+
  319.    move.l #$00ff0070,(a6)+ ;cdat
  320.  
  321.    move.l #$00060064,(a6)+ : move.l #$00060062,(a6)+ ;a/b mod
  322.    move.l #$00060066,(a6)+ ;d mod
  323.  
  324.    move.l d0,d6 : lsr.l #3,d6 ;1/4 of scr, words => /8
  325.    move.w d6,(a6)+
  326.    move.w #$5C,(a6)+       ;SIZV
  327.  
  328.    move.l #$0001005E,(a6)+ ;SIZH+start
  329.  
  330. ;subpass 3
  331.   lea -4(a0,d0.l),a3
  332.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  333.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  334.   lea -8(a0,d0.l),a3
  335.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  336.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  337.   lea -4(a4,d0.l),a3
  338.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  339.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  340.  
  341.    move.l #$8de40040,(a6)+
  342.    move.l #$00020042,(a6)+
  343.    move.l #$ff000070,(a6)+ ;cdat
  344.  
  345.    move.l #$00060064,(a6)+ : move.l #$00060062,(a6)+ ;a/b mod
  346.    move.l #$00060066,(a6)+ ;d mod
  347.  
  348.    move.l d0,d6 : lsr.l #3,d6 ;1/4 of scr, words => /8
  349.    move.w d6,(a6)+
  350.    move.w #$5C,(a6)+       ;SIZV
  351.  
  352.    move.l #$0001005E,(a6)+ ;SIZH+start
  353.  
  354. ;subpass 4
  355.   lea -2(a0,d0.l),a3
  356.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  357.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  358.   lea -6(a0,d0.l),a3
  359.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  360.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  361.   lea -2(a4,d0.l),a3
  362.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  363.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  364.  
  365.    move.l #$8de40040,(a6)+
  366.    move.l #$00020042,(a6)+
  367.    move.l #$ff000070,(a6)+ ;cdat
  368.  
  369.    move.l #$00060064,(a6)+ : move.l #$00060062,(a6)+ ;a/b mod
  370.    move.l #$00060066,(a6)+ ;d mod
  371.  
  372.    move.l d0,d6 : lsr.l #3,d6 ;1/4 of scr, words => /8
  373.    move.w d6,(a6)+
  374.    move.w #$5C,(a6)+       ;SIZV
  375.  
  376.    move.l #$0001005E,(a6)+ ;SIZH+start
  377.  
  378.  
  379. ***
  380.    movem.l (sp)+,d0-d1/a0-a3
  381.  
  382.    move.l a3,a0                  ;scrambled data is now there
  383.    bra sc2bsenter
  384.  
  385. *** scrambled chunky-to-planar =:) ***
  386.  
  387. sc2bs:
  388.    xdef sc2bs
  389.  
  390.    tst.w bltbsy : bne sc2bs
  391.  
  392.    move.l a6,bltpc
  393.  
  394. sc2bsenter:
  395.  
  396. * IN: IN: ALL BUFFERS IN CHIPMEM *except blitterlist (a6)*  !!!
  397. *
  398. *  a6: blitter-list buffer (size: less than 2k)
  399. *  a0: chunky buffer  a1: screen  a2: pass-buffer (half size of chunky buffer)
  400. *  d0.l: number of chunky pixels  d1.l: planeoffset
  401.  
  402. *** init values
  403.    move.l #$04000096,(a6)+
  404.    move.l #$80400096,(a6)+
  405.  
  406.    move.l #$ffff0044,(a6)+
  407.    move.l #$ffff0046,(a6)+
  408.  
  409. ;offsets to end of buffers for blitter DESCing
  410.    move.l d0,d6                   ;len of chscr
  411.    move.l d6,d5 : lsr.l #1,d5     ;len of buf2
  412.    move.l d6,d4 : lsr.l #2,d4     ;len of 1 plane = 320*128/8, ok.
  413.  
  414. *** Pass 1, planes 7654
  415.  
  416.   lea (a0),a3
  417.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  418.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  419.   lea 2(a0),a3
  420.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  421.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  422.  
  423.    move.l a2,(a6)+ : move.w #$0054,-2(a6) ;D
  424.    move.w a2,(a6)+ : move.w #$0056,(a6)+
  425.  
  426.    move.l #$4de40040,(a6)+
  427.    move.l #$00000042,(a6)+
  428.    move.l #$0f0f0070,(a6)+ ;cdat
  429.  
  430.    move.l #$00020064,(a6)+ : move.l #$00020062,(a6)+ ;a/b mod
  431.    move.l #$00000066,(a6)+ ;d mod
  432.  
  433.    move.w d4,(a6)+         ;d4: nr_pix/4 (words!)
  434.    move.w #$5C,(a6)+       ;SIZV
  435.  
  436.    move.l #$0001005E,(a6)+ ;SIZH+start
  437.  
  438. *** Pass 2, planes 76
  439.  
  440.   lea (a2),a3
  441.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  442.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  443.   lea 2(a2),a3
  444.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  445.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  446.   lea (a1),a3
  447.    add.w d1,a3 : add.w d1,a3 : add.w d1,a3   ;4th "doubleplane"
  448.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  449.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  450.  
  451.    move.l #$2de40040,(a6)+
  452.    move.l #$00000042,(a6)+
  453.    move.l #$33330070,(a6)+ ;cdat
  454.  
  455.    move.l #$00020064,(a6)+ : move.l #$00020062,(a6)+ ;a/b mod
  456.    move.l #$00000066,(a6)+ ;d mod
  457.  
  458.    move.w d4,d0 : lsr.w #1,d0
  459.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  460.    move.w #$5C,(a6)+       ;SIZV
  461.  
  462.    move.l #$0001005E,(a6)+ ;SIZH+start
  463.  
  464. *** Pass 2, planes 54
  465.  
  466.   lea -2(a2,d5.l),a3
  467.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  468.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  469.   lea -4(a2,d5.l),a3
  470.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  471.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  472.   lea -2(a1,d4.l),a3
  473.   add.w d1,a3 : add.w d1,a3   ;3rd "doubleplane"
  474.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  475.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  476.  
  477.    move.l #$2de40040,(a6)+
  478.    move.l #$00020042,(a6)+                ;DESC
  479.    move.l #$cccc0070,(a6)+ ;cdat
  480.  
  481.    move.l #$00020064,(a6)+ : move.l #$00020062,(a6)+ ;a/b mod
  482.    move.l #$00000066,(a6)+ ;d mod
  483.  
  484.    move.w d4,d0 : lsr.w #1,d0
  485.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  486.    move.w #$5C,(a6)+       ;SIZV
  487.  
  488.    move.l #$0001005E,(a6)+ ;SIZH+start
  489.  
  490. *** Pass 1, planes 3210
  491.  
  492.   lea -2(a0,d6.l),a3
  493.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  494.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  495.   lea -4(a0,d6.l),a3
  496.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  497.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  498.   lea -2(a2,d5.l),a3
  499.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  500.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  501.  
  502.    move.l #$4de40040,(a6)+
  503.    move.l #$00020042,(a6)+
  504.    move.l #$f0f00070,(a6)+ ;cdat
  505.  
  506.    move.l #$00020064,(a6)+ : move.l #$00020062,(a6)+ ;a/b mod
  507.    move.l #$00000066,(a6)+ ;d mod
  508.  
  509.    move.w d4,(a6)+         ;d4: nr_pix/4 (words!)
  510.    move.w #$5C,(a6)+       ;SIZV
  511.  
  512.    move.l #$0001005E,(a6)+ ;SIZH+start
  513.  
  514. *** Pass 2, planes 32
  515.  
  516.   lea (a2),a3
  517.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  518.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  519.   lea 2(a2),a3
  520.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  521.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  522.   lea (a1),a3
  523.    add.w d1,a3   ;2nd "doubleplane"
  524.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  525.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  526.  
  527.    move.l #$2de40040,(a6)+
  528.    move.l #$00000042,(a6)+
  529.    move.l #$33330070,(a6)+ ;cdat
  530.  
  531.    move.l #$00020064,(a6)+ : move.l #$00020062,(a6)+ ;a/b mod
  532.    move.l #$00000066,(a6)+ ;d mod
  533.  
  534.    move.w d4,d0 : lsr.w #1,d0
  535.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  536.    move.w #$5C,(a6)+       ;SIZV
  537.  
  538.    move.l #$0001005E,(a6)+ ;SIZH+start
  539.  
  540. *** Pass 2, planes 10
  541.  
  542.   lea -2(a2,d5.l),a3
  543.    move.l a3,(a6)+ : move.w #$004c,-2(a6) ;B
  544.    move.w a3,(a6)+ : move.w #$004e,(a6)+
  545.   lea -4(a2,d5.l),a3
  546.    move.l a3,(a6)+ : move.w #$0050,-2(a6) ;A
  547.    move.w a3,(a6)+ : move.w #$0052,(a6)+
  548.   lea -2(a1,d4.l),a3
  549.      ;1st "doubleplane"
  550.    move.l a3,(a6)+ : move.w #$0054,-2(a6) ;D
  551.    move.w a3,(a6)+ : move.w #$0056,(a6)+
  552.  
  553.    move.l #$2de40040,(a6)+
  554.    move.l #$00020042,(a6)+                ;DESC
  555.    move.l #$cccc0070,(a6)+ ;cdat
  556.  
  557.    move.l #$00020064,(a6)+ : move.l #$00020062,(a6)+ ;a/b mod
  558.    move.l #$00000066,(a6)+ ;d mod
  559.  
  560.    move.w d4,d0 : lsr.w #1,d0
  561.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  562.    move.w #$5C,(a6)+       ;SIZV
  563.  
  564.    move.l #$0001005E,(a6)+ ;SIZH+start
  565.  
  566. *** end of initblit
  567.    move.l #0,(a6)+
  568.  
  569.    move.w #1,bltbsy ;!!!
  570.    waitblt
  571.    move.w #$8040,$dff09c ;activate blit intreq
  572.    rts
  573.  
  574.  
  575.    END
  576.  
  577.